#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>


int main()
{
    pid_t id = fork();
    if(id < 0)
    {
        perror("fork");
        exit(1);//标识进程运行结束，结果不正确
    }
    else if(id == 0)
    {
        //子进程
        int cnt = 5;
        while(cnt)
        {
            printf("cnt:%d, 我是子进程, pid:%d, ppid:%d\n", cnt, getpid(), getppid());
            sleep(1);
            //cnt--;
        }
        exit(100);

    }
    else 
    {
        //父进程
        
        printf("我是父进程，pid: %d, ppid: %d\n", getpid(), getppid());
       
        //pid_t ret = wait(NULL);//阻塞式的等待
        
        int status = 0;
        pid_t ret = waitpid(id, &status, 0);//阻塞式的等待
        
        if(ret > 0)
        {
            printf("等待子进程成功，ret:%d, 子进程收到的信号编号:%d, 子进程的退出码:%d\n", ret, status & 0x7f, (status >> 8) & 0xff);
        }
        
        
        
        
        //while(1)
        //{
        //    printf("我是父进程， pid:%d, ppid:%d\n", getpid(), getppid());
        //    sleep(1);
        //}

    }


    return 0;

}











//int main()
//{
//    printf("你能看见我吗？");
//    sleep(3);
//    //return 0;
//    //exit(0);
//    _exit(15);
//
//}
//






//int sum(int a)
//{
//    int s = 0;
//    int i = 0;
//    for(i = 0; i < a; i++)
//    {
//        s += i;
//    }
//    //exit(210);
//    //return s;
//}
//
//
//int main()
//{
//    
//    
//    printf("hello world1\n");
//    printf("hello world1\n");
//    printf("hello world1\n");
//    //int ret = sum(100);
//    //if(ret != 4950)
//    //{
//    //    return 1;//标识运行结果不正确
//    //}
//    
//    exit(200);
//    //return 155;
//   
//    printf("hello world2\n");
//    printf("hello world2\n");
//    printf("hello world2\n");
//    printf("hello world2\n");
//    
//    
//    
//    //printf("hello world\n");
//
//    //int number = 0;
//
//    //for(number = 0; number < 150; number++)
//    //{
//    //    printf("%d: %s\n", number, strerror(number));
//    //}
//
//
//    return 10;
//}
